package br.com.felipe.agendamento.entity;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.xml.bind.annotation.XmlRootElement;

@Entity
@Table(name="consultorio")
@XmlRootElement
public class ConsultorioDto implements Serializable {

	@Transient
	private static final long serialVersionUID = -4499337234824497540L;

	@Id @GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="id_consultorio")
	private Integer idConsultorio;
	
	@OneToOne(cascade = CascadeType.ALL)
	@JoinColumn(name="fk_endereco")
	private EnderecoDto enderecoDto;
	
	@OneToMany(targetEntity = TelefoneDto.class, fetch = FetchType.LAZY, mappedBy="consultorioDto", cascade = CascadeType.ALL)
	private List<TelefoneDto> listaTelefones;
	
	@OneToMany(targetEntity = EmailDto.class, fetch = FetchType.LAZY, mappedBy="consultorioDto", cascade = CascadeType.ALL)
	private List<EmailDto> listaEmail;
	
	@ManyToMany(targetEntity = MedicoDto.class , cascade = {CascadeType.PERSIST, CascadeType.MERGE})  
    @JoinTable(name = "rede_atendimento", joinColumns = {@JoinColumn(name = "fk_id_consultorio")}, inverseJoinColumns = {@JoinColumn(name="fk_id_medico")})  
	private List<MedicoDto> listaMedicoRede;
	
	@OneToMany(targetEntity = ConfigAtendimentoConsultorio.class, fetch = FetchType.LAZY, mappedBy = "consultorioDto", cascade = CascadeType.ALL)
	private List<ConfigAtendimentoConsultorio> configuracaoAtendimentos;
	
	@Column(name="nome", length=30)
	private String nome;
	
	@Column(name="codigo", length=30)
	private String codigo;

	public Integer getIdConsultorio() {
		return idConsultorio;
	}

	public void setIdConsultorio(Integer idConsultorio) {
		this.idConsultorio = idConsultorio;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public List<TelefoneDto> getListaTelefones() {
		return listaTelefones;
	}

	public void setListaTelefones(List<TelefoneDto> listaTelefones) {
		this.listaTelefones = listaTelefones;
	}

	public List<EmailDto> getListaEmail() {
		return listaEmail;
	}

	public void setListaEmail(List<EmailDto> listaEmail) {
		this.listaEmail = listaEmail;
	}

	public EnderecoDto getEnderecoDto() {
		return enderecoDto;
	}

	public void setEnderecoDto(EnderecoDto enderecoDto) {
		this.enderecoDto = enderecoDto;
	}

	public List<MedicoDto> getListaMedicoRede() {
		return listaMedicoRede;
	}

	public void setListaMedicoRede(List<MedicoDto> listaMedicoRede) {
		this.listaMedicoRede = listaMedicoRede;
	}

	public List<ConfigAtendimentoConsultorio> getConfiguracaoAtendimentos() {
		return configuracaoAtendimentos;
	}

	public void setConfiguracaoAtendimentos(
			List<ConfigAtendimentoConsultorio> configuracaoAtendimentos) {
		this.configuracaoAtendimentos = configuracaoAtendimentos;
	}
	
}
